package org.lwd.datalink.utils;

import java.lang.reflect.Array;
import java.util.Map;

/**
 * @Author: weidong.lin
 * @Description: 校验工具类
 * @Date: create in 2022/6/22 15:26
 */
public class ValidatorUtil {
    /**
     * 判断对象是否为空。如果要判断的实例类型为字符串则去除前后空格后验证长度是否为0；如果要判断的实例类型为集合则判断是否为空集；
     * 其他类型则判断是否为null。
     *
     * @param object 要验证的对象。
     * @return 如果为空则返回true；否则返回false。
     */
    public static boolean isEmpty(Object object) {
        if (object == null) {
            return true;
        }

        if (object instanceof String) {
            return ((String) object).trim().length() == 0;
        }

        if (object.getClass().isArray()) {
            return Array.getLength(object) == 0;
        }

        if (object instanceof Iterable) {
            return !((Iterable<?>) object).iterator().hasNext();
        }

        if (object instanceof Map) {
            return ((Map<?, ?>) object).isEmpty();
        }

        return false;
    }

    /**
     * 判断对象是否为空。如果要判断的实例类型为字符串则去除前后空格后验证长度是否为0；如果要判断的实例类型为集合则判断是否为空集；
     * 其他类型则判断是否为null。
     *
     * @param object 要验证的对象。
     * @return 如果为空则返回fasle 否则返回true。
     */
    public static boolean isNotEmpty(Object object) {
        return !isEmpty(object);
    }

    /**
     * 判断对象是否是非空
     *
     * @param object 要验证的对象
     * @return 如果非空则返回true；否则返回false。
     */
    public static boolean isNotNull(Object object) {
        return !isEmpty(object);
    }


    /**
     * 字符串是否为空
     *
     * @param obj
     * @return
     */
    public static boolean isStrEmpty(String obj) {
        if (null == obj) {
            return true;
        }

        if (obj.trim().length() == 0) {
            return true;
        }

        if (obj.equals("NULL")) {
            return true;
        }

        return false;
    }
}
